package com.qf.listener;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author sunyamei
 * @version V1.0
 * @Project javase2203
 * @Package com.qf.listener
 * @Description:
 * @Date 2022/8/9 11:02
 */
@Component
public class TestHelloListener {

    /**
     * 这个是消息处理方法
     * @param msg
     */
    @RabbitHandler
    @RabbitListener(queues = "queue1")
    public void messageHandler(String msg, Channel channel, Message message) throws Exception{
        try {
            //处理业务
            System.out.println("=========" + msg);
            //模拟业务处理中出现异常
            //int i = 1/0;

            //返回给mq接收成功的回调消息, mq会将队列中发来的数据删除
            /**
             * 第一个参数: DeliveryTag,消息的唯一标识  channel+消息编号
             * 第二个参数：是否开启批量处理 false:不开启批量
             */
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (Exception e) {
            e.printStackTrace();
            //返回给mq接收失败的消息, mq会将队列中的数据重新发送
            /**
             * 第一个参数: DeliveryTag,消息的唯一标识  channel+消息编号
             * 第二个boolean true所有消费者都会拒绝这个消息，false代表只有当前消费者拒绝
             * 第三个boolean true消息接收失败重新回到原有队列中
             */
            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
        }



    }
}